iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0
佛心分享-刷題不只是刷題

圖解LeetCode(入門篇)系列 第 11

圖解LeetCode(入門篇): 58. Length of Last Word

  • 分享至 

  • xImage
  •  

58. Length of Last Word

題目描述:

給定一個只包含大小寫字母和空格 ' ' 的字符串 s,返回其最後一個單詞的長度。如果字符串尾部包含空格,應該跳過這些空格,找到最後一個單詞的長度。最後一個單詞是指字符串中最後一個非空部分。

注意: 字符串 s 中可能會有多餘的尾部空格。

Example 1:

  • Input: s = "Hello World"
  • Output: 5
  • Explanation: The last word is "World" with length 5.

解題思路:
這道 LeetCode 題目是一道實作題,解法相對簡單。基本思路是從字符串的末尾開始向前遍歷,首先跳過尾部的空格,然後找到最後一個單詞的起始位置,並計算該單詞的長度。這樣就能準確地返回最後一個單詞的長度。
https://ithelp.ithome.com.tw/upload/images/20240820/20168306BnSx3p6lA6.jpg

var lengthOfLastWord = function(s) {
    let count = 0;
    let i = s.length - 1;

    while (i >= 0 && s[i] === ' ') {
        i--;
    }

    while (i >= 0 && s[i] !== ' ') {
        count++;
        i--;
    }

    return count;
};

時間複雜度:O(n),其中 n 是字符串的長度。
空間複雜度:O(1),只使用了常數空間。

對於熟悉 JavaScript 的讀者來說,此題應該有更直觀的解法。我們可以利用 String 的 API,如 trim() 來去除字符串頭尾的空白字元,然後使用 split(' ') 將字符串按空格分割成陣列,接著直接獲取最後一個單詞並計算其長度。這種方法簡單明瞭,非常適合快速解題。

https://ithelp.ithome.com.tw/upload/images/20240820/20168306iRd3eqN0J5.jpg

var lengthOfLastWord = function(s) {
    s = s.trim();
    const words = s.split(' ');
    return words[words.length - 1].length;
};

時間複雜度:O(n),使用 trim()split() 方法,這兩個方法的時間複雜度都是 O(n)
空間複雜度:O(n),因為 split() 會生成一個陣列。

總結:
無論是使用 while 迴圈還是 JavaScript 的 split 方法,建議讀者都要能夠掌握這兩種解法。

  • while 迴圈:更節省空間,適合對時間和空間有較高要求的場景。
  • split 方法:更易讀,通過 API 直接實現,適合追求代碼簡潔和可讀性的場景。

這道題目可以歸類為「while 迴圈」和「split 方法」。這兩種方法都能高效解決問題,選擇哪一種取決於具體需求和個人偏好。在工作中,我更偏好使用 JavaScript 的 API,而在解答 LeetCode 時則更喜歡使用 while 迴圈,因為這樣可以讓讀者更好地學習如何實作解法。


上一篇
圖解LeetCode(入門篇): 35. Search Insert Position
下一篇
圖解LeetCode(入門篇): 66. Plus One
系列文
圖解LeetCode(入門篇)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言